package com.wzr.furerp.product.dao.service;

import com.wzr.furerp.product.dao.dao.ProductDao;
import com.wzr.furerp.product.dao.entity.EnumProductState;
import com.wzr.furerp.product.dao.entity.EnumProductStatus;
import com.wzr.furerp.product.dao.entity.Product;
import com.wzr.furerp.product.exception.ProductStatusException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ProductService {

	@Autowired
	private ProductDao productDao;

	
	/**
	 * 根据商品状态码取商品状态说明
	 * @param status 状态的数值表示
	 * @return 返回状态的汉字表示
	 */
	public String getProductStatusName(int status){
		String statusName = null;
		if(EnumProductStatus.DOING.getStatus() == status){
			statusName = "生产中";
		}
		if(EnumProductStatus.CANCEL.getStatus() == status){
			statusName = "取消生产";
		}
		if(EnumProductStatus.DONE.getStatus() == status){
			statusName = "已完工";
		}
		return statusName;
	}
	
	public void add(Object obj) {
		productDao.add(obj);
	}
	
	/**
	 * 批量添加商品记录
	 * @param objList
	 */
	public void addBatch(List<?> objList) {
		
		productDao.addBatch(objList);
	}
	
	public void updateStatus(String barCode, int status){
		productDao.updateStatus(barCode, status);
	}
	public void delete(Object obj) {
		productDao.delete(obj);
	}
	
	public static Product getByBarCode(String barCode) {
		ProductDao productDao = new ProductDao();
		return productDao.getByBarCode(barCode);
	}
	/**
	 * 根据条码取商品当前状态
	 * @param barCode
	 * @return : 成功返回EnumProductState枚举常量, 否则(未知的状态)返回null
	 */
	public static EnumProductState getProductStatus(String barCode) {
		Product pd =  getByBarCode(barCode);
		if(null == pd){
			// 商品目录中不存在, 商品处于"系统中不存在"状态
			return EnumProductState.NONE;
		}
		if(null == pd.getStatus()){
			// 商品目录中已添加, 但未产生业务数据
			return EnumProductState.PRODUCT_EXIST;
		}
		if(null != pd.getStatus()) {
			if (EnumProductState.CANCEL.ordinal() == pd.getStatus()) {
				// 取消生产
				return EnumProductState.CANCEL;
			}
			if (EnumProductState.WAIT_FOR_ACCEPT.ordinal() == pd.getStatus()) {
				// 商品处于"待接收状态"
				return EnumProductState.WAIT_FOR_ACCEPT;
			}
			if (EnumProductState.ACCEPTED.ordinal() == pd.getStatus()) {
				// 商品处于"已接收状态"
				return EnumProductState.ACCEPTED;
			}
			if (EnumProductState.DONE.ordinal() == pd.getStatus()) {
				// 已经完成生产
				return EnumProductState.DONE;
			}
		}
//			if(1 == pd.getStatus()){
//				// 处于生产过程中(待接收或已接收)
//				TransferOrderDetail tod = transferOrderDetailService.getLastByBarCode(barCode);
//				if(null != tod){
//					if(null == tod.getToTime()){
//						// 没有"接收时间",商品处于"待接收状态"
//						return EnumProductState.WAIT_FOR_ACCEPT;
//					}else{
//						// 有"接收时间",商品处于"已接收状态"
//						return EnumProductState.ACCEPTED;
//					}
//				}
//				else{
//					CompleteDetail cpd = completeDetailService.getLastByBarCode(barCode);
//					if(null != cpd){
//						// 有完工明细, 商品处于"已经完成生产"状态
//						return EnumProductState.DONE;
//					}else{
//						// 没有完工明细, 商品处于"系统中不存在"状态
//						return EnumProductState.NONE;
//					}
//				}
//			}
//		}

		return null;
	}

	/**
	 * 验证商品是否处于可接收状态, 若不能进行接收则返回异常信息
	 * <br/>Wfa=Wait for accept
	 * @param barCode
	 * @return 可接收则返回空字符串, 否则返回异常信息(返回主程序后用于抛出ProductStatusException异常)
	 */
	public static String validateWfaStatus(String barCode) {
		EnumProductState enumPs = getProductStatus(barCode);
		if(null == enumPs){
			// 此商品处于未知状态
			return ProductStatusException.EXCEP_PRODUCT_UNKOWN + ", 商品条码: " + barCode;
		}
		if(EnumProductState.NONE == enumPs){
			// 系统中不存在此商品
			return ProductStatusException.EXCEP_PRODUCT_NONE;
		}
		if(EnumProductState.PRODUCT_EXIST == enumPs){
			// 商品目录中已添加, 但未产生业务数据
			return ProductStatusException.EXCEP_PRODUCT_INFO;
		}
		if(EnumProductState.WAIT_FOR_ACCEPT == enumPs){
			// 此商品处于调拨且未接收状态
			return "";
		}
		if(EnumProductState.ACCEPTED == enumPs){
			// 此商品已接收状态, 不能进行接收
			return ProductStatusException.EXCEP_PRODUCT_ACCEPTED;
		}
		if(EnumProductState.CANCEL == enumPs){
			// 此商品处于取消生产状态
			return ProductStatusException.EXCEP_PRODUCT_CANCEL;
		}
		if(EnumProductState.DONE == enumPs){
			// 此商品已完工下线, 不能进行调拨
			return ProductStatusException.EXCEP_PRODUCT_COMPLETED;
		}

		return ProductStatusException.EXCEP_PRODUCT_UNKOWN + ", 商品条码: " + barCode;

	}
	/**
	 * 根据客户代码取商品信息 
	 * @param cusCode 客户代码
	 * @return 此客户订货的所有商品
	 */
	public List<Product> getListByCusCode(String cusCode) {
		return productDao.getListByCusCode(cusCode);
	}
}
